'''
    区分请求模型和响应模型的栗子
    需求
    假设一个注册功能
    输入账号、密码、昵称、邮箱，注册成功后返回个人信息
    正常情况下不应该返回密码，所以请求体和响应体肯定是不一样的
'''

from typing import Optional

import uvicorn
from fastapi import FastAPI
from pydantic import BaseModel, EmailStr

app = FastAPI()


class UserIn(BaseModel):
    username: str
    password: str
    email: EmailStr
    full_name: Optional[str] = None


class UserOut(BaseModel):
    username: str
    email: EmailStr
    full_name: Optional[str] = None


@app.post('/user/', response_model=UserOut)
async def create_user(user: UserIn):
    return user

'''
    即使请求数据包含了密码，但因为响应模型不包含 password，所以最终返回的响应数据也不会包含 password
    FastAPI 通过 Pydantic 过滤掉所有未在响应模型中声明的数据
'''




if __name__ == '__main__':
    uvicorn.run(app='main2:app', host='127.0.0.1', port=8000, reload=True, debug=True)